Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

144
Visualizações
La biblioteca de "cifrado" de Dart proporciona una cadena ilegible después del cifrado

Me estoy mudando de React Native a Flutter/Dart. Tengo el siguiente fragmento de código del mecanografiado de React Native:

 import CryptoJS from 'crypto-js'; export const decryptSessionKey = (randomKey: string, cipher: string) => { const iv = randomKey ? randomKey.slice(0, 16) : ''; const decrypted = CryptoJS.AES.decrypt( cipher, CryptoJS.enc.Utf8.parse(randomKey), { iv: CryptoJS.enc.Utf8.parse(iv), mode: CryptoJS.mode.CTR, padding: CryptoJS.pad.NoPadding, }, ); return decrypted.toString(CryptoJS.enc.Utf8); };

Y moví ese código a flutter/dart como:

 import 'dart:math'; import 'package:encrypt/encrypt.dart'; String decryptSessionKey(String randomKey, String cipher) { final encrypter = Encrypter(AES(Key.fromUtf8(randomKey), mode: AESMode.ctr, padding: null)); var iv = randomKey.substring(0, 16); final decrypted = encrypter.decrypt(Encrypted.fromUtf8(cipher), iv: IV.fromUtf8(iv)); return decrypted.toString(); }

Dada la clave aleatoria como 0QaOUmxpugtnRUTZ6yOSxQeZq47Akiqf y el cifrado como piMgUF2ISUl/g7ns2/gZyaWQm6Rdv7x500GD7lMLYxhy14Tg+Bizibvz . Obtendría el descifrado en Typescript como 54387c3b38150d2a7a1c545167736e701629382648 .

Sin embargo, en Flutter, obtuve una cadena ilegible como ��ʋ�ͻh�0�M��R�Z���YInCXTI*��!�\��-S�f��/�SU��'

¿Se me escapa algo? ¡Gracias de antemano!

about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

En el código Dart, el texto cifrado debe estar decodificado en Base64 y no codificado en UTF8:

 final decrypted = encrypter.decrypt(Encrypted.from64(cipher), iv: IV.fromUtf8(iv)); // fromBase64() works also

Esto no es necesario en el código JavaScript, donde CryptoJS.AES.decrypt() convierte implícitamente el texto cifrado codificado en Base64 en un objeto CipherParams .

Si esto se soluciona, ¡el descifrado funciona!

Tenga en cuenta la siguiente vulnerabilidad: en ambos códigos, los primeros 16 bytes de la clave de 32 bytes también se utilizan como IV. Si se aplica la misma clave varias veces, automáticamente se repiten los pares clave/IV. Especialmente para CRT, esto es inseguro, consulte ¿Por qué no se deben reutilizar IV/pares de claves en el modo CTR?
Por lo general, se genera un IV aleatorio para cada cifrado. El IV no es secreto y se envía junto con el texto cifrado (típicamente concatenado). En el lado de descifrado, el IV se quita y se usa para descifrar.

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda